home *** CD-ROM | disk | FTP | other *** search
/ Spanish Scene 1 / SpanishScene1.iso / spanish pack n°1 by llfb / --llfb-- / programas / sources1.dms / sources1.adf / SOURCES / Vectores / FIRE-CREW_Cube.ASM < prev    next >
Assembly Source File  |  1996-06-04  |  12KB  |  381 lines

  1. ;FI-REFILL BY LADO OF FI-RE CREW IN 1992 !
  2.     
  3.     
  4. ;    org $25000
  5. ;    load $25000
  6.  
  7.  
  8.     Section    Roman,code_c
  9.  
  10.     
  11. ;    >extern 'DF0:raytr.dat',sinus
  12.     
  13.  
  14. j    lea $30000,a0             ;memoria torlese
  15. lo    clr.l (a0)+
  16.     cmp.l #$70000,a0
  17.     bcs lo
  18.     
  19.     lea $dff000,a6           ;custom
  20. aga    move.l 4(a6),d0
  21.     lsr.l #8,d0
  22.     cmp.w #$130,d0
  23.     bne aga
  24.     move.w #$7fff,$96(a6)    ;clear  DMACON
  25.     move.w #$7fff,$9a(a6)    ;clear  INTENA
  26.     move.l #copper,$84(a6)   
  27.     clr.w $8a(a6)            ;start copper
  28.     move.w #$87d0,$96(a6)    ;DMACON
  29.     move.w #$c010,$9a(a6)
  30.  
  31. h1    bsr wait                 ;waitblitter
  32. aaa    move.l 4(a6),d0
  33.     lsr.l #8,d0
  34.     cmp.w #$60,d0
  35.     bne aaa
  36.     bsr filler               
  37.     btst #6,$bfe001
  38.     bne h1
  39.     bsr wait
  40.     
  41.     move.w #$7fff,$96(a6)
  42.     move.w #$7fff,$9a(a6)
  43.     clr.w $88(a6)            ;start original copper
  44.     move.w #$87f0,$96(a6)
  45.     move.w #$e02c,$9a(a6)
  46.     clr.l d0
  47.     rts                      ;END
  48.     
  49.  
  50. filler    add.w #4,addx           ;xszog novelese
  51.     and.w #$1ff,addx   
  52.     add.w #6,addy           ;yszog novelese    
  53.     and.w #$1ff,addy
  54.     add.w #4,addz           ;zszog novelese        
  55.     and.w #$1ff,addz
  56.     lea coords(pc),a0        ;kocka pontjainak x,y,z koordinatai
  57.     lea sinus(pc),a1         ;sinus ertekek
  58.     lea $80(a1),a3           ;cosinus ertekek
  59.     lea tarolo(pc),a2        ;2D x,y letarolasa
  60.     lea addx(pc),a4          ;szogek
  61.     moveq #61,d7              ;
  62. h3    movem.w (a0)+,d0/d1/d6   ;x,y,z
  63.     move.w 4(a4),d5          ;Zszog
  64.     move.w (a3,d5.w),d4     ;cos ertek
  65.     move.w (a1,d5.w),d5     ;sin ertek
  66.     move.w d0,d2            ;c1
  67.     move.w d1,d3        ;c2
  68.     muls d4,d0        ;c1*cos(c0angle)
  69.     muls d5,d1        ;c2*sin(c0angle)
  70.     muls d4,d3        ;c2*cos(c0angle)
  71.     muls d5,d2        ;c1*sin(c0angle)
  72.     sub.l d1,d0        ;c1*cos(c0angle)-c2*sin(c0angle)
  73.     add.l d2,d3        ;c2*cos(c0angle)+c1*sin(c0angle)
  74.     add.l d0,d0        
  75.     add.l d3,d3
  76.     swap d0                 ;uj c1
  77.     swap d3                 ;uj c2
  78.     move.w d6,d1        
  79.     move.w d0,d6             ;X tarolasa
  80.     move.w d3,d0             ;Y
  81.     move.w (a4),d5           ;Xszog
  82.     move.w (a3,d5.w),d4     ;cos ertek
  83.     move.w (a1,d5.w),d5     ;sin ertek
  84.     move.w d0,d2            ;c1
  85.     move.w d1,d3        ;c2
  86.     muls d4,d0        ;c1*cos(c0angle)
  87.     muls d5,d1        ;c2*sin(c0angle)
  88.     muls d4,d3        ;c2*cos(c0angle)
  89.     muls d5,d2        ;c1*sin(c0angle)
  90.     sub.l d1,d0        ;c1*cos(c0angle)-c2*sin(c0angle)
  91.     add.l d2,d3        ;c2*cos(c0angle)+c1*sin(c0angle)
  92.     add.l d0,d0        
  93.     add.l d3,d3
  94.     swap d0                 ;uj c1
  95.     swap d3                 ;uj c2
  96.     move.w d6,d1        
  97.     move.w d0,d6             ;uj Y tarolasa
  98.     move.w d3,d0             ;Z
  99.     move.w 2(a4),d5          ;Yszog
  100.     move.w (a3,d5.w),d4     ;cos ertek
  101.     move.w (a1,d5.w),d5     ;sin ertek
  102.     move.w d0,d2            ;c1
  103.     move.w d1,d3        ;c2
  104.     muls d4,d0        ;c1*cos(c0angle)
  105.     muls d5,d1        ;c2*sin(c0angle)
  106.     muls d4,d3        ;c2*cos(c0angle)
  107.     muls d5,d2        ;c1*sin(c0angle)
  108.     sub.l d1,d0        ;c1*cos(c0angle)-c2*sin(c0angle)
  109.     add.l d2,d3        ;c2*cos(c0angle)+c1*sin(c0angle)
  110.     add.l d0,d0        
  111.     add.l d3,d3
  112.     swap d0                 ;uj c1
  113.     swap d3                 ;uj c2
  114.     move.w d6,d1        
  115.     exg d0,d3                ;X csere Z-vel    Z=d3
  116.     moveq #11,d6             ;lekepezes 2D-re
  117.     move.w #$660,d2
  118.     sub.w d3,d2              ;$444-Z
  119.     muls d2,d0               ;z'*x
  120.     asr.l d6,d0              ;z'*x/2048=2D X
  121.     muls d2,d1               ;z'*y
  122.     asr.l d6,d1              ;z'*y/2048=2D Y
  123.     add.w #150,d0         ;X=X+150     kozepre a kepernyon           
  124.     add.w #100,d1            ;Y=Y+100
  125.     move.w d0,(a2)+         ;2D X tarolasa
  126.     move.w d1,(a2)+          ;2D Y tarolasa
  127.     dbf d7,h3                ;8-szor               
  128.  
  129.     move.l #$ffff8000,$72(a6)  ;vonalhuzashoz standard ertekek
  130.     move.l #-1,$44(a6)
  131.     move.w #120,$60(a6)        ;kepernyo szelessege
  132.  
  133.     eor.w #$8000,erno+2        ;kepernyo csere
  134.     eor.w #$8000,copscr       ;csere a copperben is
  135.     eor.w #$8000,copscr+4
  136.     eor.w #$8000,copscr+8
  137.  
  138.     move.l erno(pc),a0          
  139.     add.l #28+[199*$78],a0     
  140.     bsr wait          
  141.     move.l #$01000002,$40(a6)   
  142.     move.w #$28-[[11*16]/8],$66(a6)
  143.     move.l a0,$54(a6)
  144.     move.w #$8a0b,$58(a6)       
  145.     
  146.     lea tarolo(pc),a1          ;2D x,y ertekek
  147.     lea meghat(pc),a2          ;structure
  148.     lea sinus+$400(pc),a3      ;sor kezdopontja /0-f/ + $a4a or $b4a
  149.     lea sinus+$680(pc),a5      ;szelesseg/2/ es vonal hossz values
  150.     move.w (a2)+,lap           ;lapok szama /6/
  151. h7    move.l (a2)+,d7            ;hany pontot kosson ossze
  152.     move.l (a2)+,a4            ;oszzekotesi sorrend
  153.     move.l (a2)+,scr           ;melyik kepernyore
  154.     move.l (a2)+,col           ;mutato a szinpalettara,melyik szin a copp.
  155.     move.l erno(pc),a0         ;ide rajzol
  156.     movem.w (a4),d0/d1/d2      ;lathatosag eldontese
  157.     move.w (a1,d1.w),d3        ;x1
  158.     sub.w (a1,d0.w),d3         ;X1-X0
  159.     move.w 2(a1,d2.w),d4       ;y2
  160.     sub.w 2(a1,d1.w),d4        ;Y2-Y1
  161.     move.w 2(a1,d1.w),d5       ;y1
  162.     sub.w 2(a1,d0.w),d5        ;Y1-Y0
  163.     move.w (a1,d2.w),d6        ;x2
  164.     sub.w (a1,d1.w),d6         ;X2-X1
  165.     mulu d4,d3                 ;(y2-y1)(x1-x0)=d3
  166.     mulu d6,d5                 ;(y1-y0)(x2-x1)=d5
  167.     sub.w d5,d3                
  168.     bmi vakon                   ;nem latszik
  169.     moveq #10,d5                ;1024
  170.     lsr.w d5,d3                 ;d3=d3/1024
  171.     and.w #$f,d3              ;also 4 bit levalasztasa
  172.     add.w d3,d3                ;word
  173.     movem.l a0/a1,-(a7)
  174.     lea colors(pc),a0          ;szinek
  175.     lea copcol(pc),a1          ;copperben a szinek
  176.     add.w col(pc),a0           ;uj szin
  177.     add.w col+2(pc),a1         ;melyik szin a copperban
  178.     move.w (a0,d3.w),d3        ;uj szin bekerese
  179.     move.w d3,(a1)             ;beirasa a copperbe
  180.     movem.l (a7)+,a0/a1
  181.     
  182.     move.w (a4)+,d5            ;1.pont
  183.     move.w (a1,d5.w),d0        ;x1 koordinata
  184.     move.w 2(a1,d5.w),d1       ;y1 koordinata
  185.     bsr lines                  ;vonalhuzo
  186. vakon    subq.w #1,lap              ;lapszam csokkentes
  187.     bne h7                     ;van meg ?
  188.     bra fill                   ;nincs , go fill
  189.  
  190. lines    move.w (a4)+,d5          ;kovetkezo pont
  191.     move.w (a1,d5.w),d2      ;x2
  192.     move.w 2(a1,d5.w),d3     ;y2
  193.     movem.w d2/d3,-(a7)      ;kovetkezo pont latarolasa
  194.     cmp.w d1,d3              ;y2-y1
  195.     bgt p1
  196.     exg d0,d2                ;kisebb --> coords csere                
  197.     exg d1,d3                ;mindig a nagyobb y-bol kell huzni !
  198.     beq not                  
  199. p1    move.w #120,d5           ;kepernyo szelessege
  200.     move.w d1,d4             ;nagyobb y
  201.     mulu d5,d4               ;120*y = pont sora
  202.     move.w d0,d5             ;x0
  203.     add.l a0,d4              ;$30000+x0 = pont oszlopa
  204.     lsr.w #3,d5              ;pont sora/8
  205.     add.w d5,d4              ;megkapja a pont helyet
  206.     moveq #0,d5
  207.     sub.w d1,d3              ;Y
  208.     sub.w d0,d2              ;X   /x1-x2/
  209.     bpl p2
  210.     moveq #1,d5              ;x2 kisebb volt,a kapott X negativ 
  211.     neg.w d2                 ;most mar pozitiv X
  212. p2    move.w d3,d1             ;Y
  213.     add.w d1,d1              ;2Y
  214.     cmp.w d2,d1              ;X-2Y
  215.     dbhi d3,p3               ;csokkenti Y-t ha
  216. p3    move.w d3,d1             ;Y
  217.     sub.w d2,d1              ;Y-X
  218.     bpl p4
  219.     exg d2,d3                ;X csereje Y-al
  220. p4    addx.w d5,d5
  221.     add.w d2,d2              ;2Y             
  222.     move.w d2,d1             ;2Y
  223.     sub.w d3,d2              ;2Y-X
  224.     addx.w d5,d5
  225.     add.w d0,d0
  226.     move.w d2,d6
  227.     sub.w d3,d6
  228.     add.w d3,d3
  229. ok    move.w (a5,d3.w),d3         ;$58
  230.     move.w (a3,d0.w),d0         ;$40
  231.     move.b dat(pc,d5.w),d5      ;melyik siknyolcad
  232.     bsr okvonal                 ;vonalrajz
  233. not    movem.w (a7)+,d0/d1
  234.     dbf d7,lines
  235.     rts
  236. dat    dc.l $3431353,$b4b1757     ;siknyolcad    
  237.  
  238. okvonal    move.l d7,-(a7)
  239.     moveq #2,d7                ;3 lehetoseg
  240.     swap d2                    ;a d2-ot felhasznalom
  241.     move.w scr+2(pc),d2        ;melyik kepernyore
  242. loop    lsr.w #1,d2                ;az also 3 bit donti el
  243.     bcc noo                    ;Carry=0 --> nem kell
  244.     bsr wait
  245.     swap d2                    ;eredeti d2
  246.     move.w d2,$52(a6)           ;2y-x
  247.     move.w d0,$40(a6)           ;12-15-->sor kezdopontja /0-f/ + a4a
  248.     move.b d5,$43(a6)           ;siknyolcad
  249.     move.l d4,$48(a6)           ;vonal kezdocime
  250.     move.l d4,$54(a6)           ;vonal kezdocime
  251.     move.w d1,$62(a6)           ;2y
  252.     move.w d6,$64(a6)           ;2y-2x
  253.     move.w d3,$58(a6)           ;szelesseg=2 , magassag=vonal hossza
  254.     swap d2
  255. noo    add.l #$28,d4                ;kovetkezo kepernyo
  256.     dbf d7,loop
  257.     move.l (a7)+,d7
  258.     rts
  259.         
  260. fill    move.l erno(pc),a0          
  261.     add.l #28+[200*$78],a0     
  262.     bsr wait                    ;uzemmodban dolgozik
  263.     move.l #$9f00012,$40(a6)   
  264.     move.w #$28-[[11*16]/8],$64(a6)
  265.     move.w #$28-[[11*16]/8],$66(a6)
  266.     move.l a0,$50(a6)
  267.     move.l a0,$54(a6)
  268.     move.w #$8a0b,$58(a6)       ;feltolt
  269.     rts
  270.     
  271. calcul    move.w (a3,d5.w),d4     ;cos ertek
  272.     move.w (a1,d5.w),d5     ;sin ertek
  273.     move.w d0,d2            ;c1
  274.     move.w d1,d3        ;c2
  275.     muls d4,d0        ;c1*cos(c0angle)
  276.     muls d5,d1        ;c2*sin(c0angle)
  277.     muls d4,d3        ;c2*cos(c0angle)
  278.     muls d5,d2        ;c1*sin(c0angle)
  279.     sub.l d1,d0        ;c1*cos(c0angle)-c2*sin(c0angle)
  280.     add.l d2,d3        ;c2*cos(c0angle)+c1*sin(c0angle)
  281.     add.l d0,d0        
  282.     add.l d3,d3
  283.     swap d0                 ;uj c1
  284.     swap d3                 ;uj c2
  285.     move.w d6,d1        
  286.     rts
  287.  
  288. wait    btst #$e,2(a6)          ;waitblitter
  289.     bne wait
  290.     rts
  291.  
  292.  
  293.  
  294. copper    dc.w $100,$200,$8e,$2c81,$90,$2cc1,$92,$38,$94,$d0
  295.     dc.w $120,0,$122,0,$124,0,$126,0,$128,0,$12a,0,$12c,0,$12e,0
  296.     dc.w $130,0,$132,0,$134,0,$136,0,$138,0,$13a,0,$13c,0,$13e,0
  297.     dc.w $180,0,$108,$50,$10a,$50,$182
  298. copcol    dc.w 0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  299.     dc.w $e0,3,$e4,3,$e8,3,$e2
  300. copscr    dc.w 0,$e6,$28,$ea,$50
  301.     dc.w $3001,$fffe,$100,$3200,$180,$ff0,$3101,$fffe,$180,$124
  302.     dc.w $f001,$fffe,$100,$200,$180,$ff0,$f101,$fffe,$180,0
  303.     dc.w $ffff,$fffe
  304.  
  305. coords    dc.w -60,60,60,60,60,60,60,-60,60,-60,-60,60,-60,60,-60
  306.     dc.w 60,60,-60,60,-60,-60,-60,-60,-60
  307.     dc.w -45,40,60,-15,-40,60,0,-15,60,15,-40,60,45,40,60
  308.     dc.w 15,40,60,5,0,60,0,25,60,-5,0,60,-15,40,60          ;w
  309.     dc.w -35,40,-60,-35,-40,-60,-5,-40,-60,-5,-10,-60,5,-40,-60
  310.     dc.w 45,-40,-60,15,0,-60,35,10,-60,35,30,-60,15,40,-60     ;r
  311.     dc.w -30,-60,-40,-30,-60,40,30,-60,40,30,-60,20,0,-60,20
  312.     dc.w 0,-60,-20,30,-60,-20,30,-60,-40                       ;c
  313.     dc.w -30,60,-40,-30,60,40,0,60,40,0,60,10,20,60,10,20,60,-10
  314.     dc.w 0,60,-10,0,60,-20,30,60,-20,30,60,-40       ;f
  315.     dc.w 60,40,15,60,-40,15,60,-40,-15,60,40,-15     ;i
  316.     dc.w -60,40,30,-60,-40,30,-60,-40,-30,-60,-20,-30,-60,-20,0
  317.     dc.w -60,-10,0,-60,-10,-20,-60,10,-20,-60,10,0,-60,20,0
  318.     dc.w -60,20,-30,-60,40,-30  ;e
  319.  
  320.  
  321. ;1:alap 2:alap+$28 3:alap,alap+$28 4:alap+$50 5:alap,alap+$50 
  322. ;6:alap+$28,alap+$50 7:alap,alap+$28,alap+$50
  323. meghat    dc.w 12
  324.     dc.l 3,kot1,1,$00400000
  325.     dc.l 3,kot2,1,$00400000
  326.     dc.l 3,kot3,2,$00400004
  327.     dc.l 3,kot4,2,$00400004
  328.     dc.l 3,kot5,3,$00400008
  329.     dc.l 3,kot6,3,$00400008
  330.     dc.l 9,kot7,4,$0000000c
  331.     dc.l 9,kot8,4,$0000000c
  332.     dc.l 7,kot9,5,$00000010
  333.     dc.l 9,kot10,5,$00000010
  334.     dc.l 3,kot11,6,$00000014
  335.     dc.l 11,kot12,6,$00000014
  336.     
  337. kot1    dc.w 0,4,8,12,0
  338. kot2    dc.w 16,28,24,20,16
  339. kot3    dc.w 4,20,24,8,4
  340. kot4    dc.w 0,12,28,16,0
  341. kot5    dc.w 0,16,20,4,0
  342. kot6    dc.w 8,24,28,12,8
  343. kot7    dc.w 32,68,64,60,56,52,48,44,40,36,32
  344. kot8    dc.w 72,76,80,84,88,92,96,100,104,108,72
  345. kot9    dc.w 112,116,120,124,128,132,136,140,112
  346. kot10    dc.w 144,180,176,172,168,164,160,156,152,148,144
  347. kot11    dc.w 184,196,192,188,184
  348. kot12    dc.w 200,204,208,212,216,220,224,228,232,236,240,244,200
  349.  
  350. colors    blk.w 16,0
  351. ;                         kek
  352.     dc.w 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
  353. ;                         piros
  354.     dc.w 0,$100,$200,$300,$400,$500,$600,$700,$800,$900,$a00,$b00
  355.     dc.w $c00,$d00,$e00,$f00
  356. ;                         zold
  357.     dc.w 0,$10,$20,$30,$40,$50,$60,$70,$80,$90,$a0,$b0,$c0,$d0,$e0,$f0
  358. ;              sarga
  359.     dc.w 0,$110,$220,$330,$440,$550,$660,$770,$880,$990,$aa0,$bb0,$cc0
  360.     dc.w $dd0,$ee0,$ff0
  361. ;              lila    
  362.     dc.w 0,$101,$202,$303,$404,$505,$606,$707,$808,$909,$a0a,$b0b,$c0c
  363.     dc.w $d0d,$e0e,$f0f
  364. ;              cyan
  365.     dc.w 0,$11,$22,$33,$44,$55,$66,$77,$88,$99,$aa,$bb,$cc,$dd,$ee,$ff
  366. ;              feher    
  367.     dc.w 0,$111,$222,$333,$444,$555,$666,$777,$888,$999,$aaa,$bbb,$ccc
  368.     dc.w $ddd,$eee,$fff
  369.  
  370.  
  371. addx    dc.w 0             ;xangle 
  372. addy    dc.w 0            ;yangle
  373. addz    dc.w 0             ;zangle
  374. lap    dc.w 0             ;siklapok szama/object
  375. scr    dc.l 0             ;kepernyo
  376. col    dc.l 0             ;color , coppercolor
  377. erno    dc.l $38000        ;kepernyo
  378. sinus    incbin "Coleccion_Sources1:Sources/Vectores/raytr.dat"
  379. tarolo    blk.b 100,0
  380.  
  381.